from time import sleep
import math

"""
假设：
正北为0°
正东为90°
正南为180°
正西为270°
"""

"""
假设敌军信号：
M:向前推进100米
L10:为向左转10°（10为可变参数）
R10:为向右转10°（10为可变参数）
T:时间校准
P:位置校准
"""

"""
用到的知识：
角度转化弧度：π／１８０＊角度
求正弦：math.sin(弧度)
求余弦：math.cos(弧度)
90,180,270三个临界点转化弧度后的三角函数值不为0，因此单独列出
"""

class Tank(object):
    # 初始化参数
    def __init__(self):
        x = input("请输入敌军坦克当前x坐标：")
        y = input("请输入敌军坦克当前y坐标：")
        d = input("请输入敌军坦克当前角度(0～360之间的任意自然数)：")
        self.x = int(x)
        self.y = int(y)
        #角度
        self.D = int(d)
        #弧度
        self.d = self.D*(math.pi/180)

    # 向前推进
    def move(self):
        if 0 <= self.D < 90:
            #此时坦克方向介于东，北之间
            #此时推进，ｘ递增，ｙ递增
            self.x += math.sin(self.d)*1
            self.y += math.cos(self.d)*1
        elif self.D == 90:
            self.x += 1
        elif 90 < self.D < 180:
            #此时坦克方向介于东，南之间
            #此时推进，ｘ递增，ｙ递减
            self.x += math.sin(self.d)*1
            self.y -= math.cos(self.d)*1
        elif self.D == 180:
            self.y -= 1
        elif 180 < self.D < 270:
            #此时坦克方向介于西，南之间
            #此时推进，ｘ递减，ｙ递增
            self.x -= math.sin(self.d)*1
            self.y -= math.cos(self.d)*1
        elif self.D == 270:
            self.x -= 1
        elif 270 < self.D < 360:
            #此时坦克方向介于西，北之间
            #此时推进，ｘ递减，ｙ递增
            self.x -= math.sin(self.d)*1
            self.y += math.cos(self.d)*1

    # 左转
    def turn_left(self, D):
        #根据截获的信号调整角度
        self.D -= D
        #如果角度超标，则重置
        if self.D > 360:
            self.D -= 360
        elif self.D < 0:
            self.D += 360
        else:
            pass

    # 右转
    def turn_right(self, D):
        #根据截获的信号调整角度
        self.D += D
        #如果角度超标，则重置
        if self.D > 360:
            self.D -= 360
        elif self.D < 0:
            self.D += 360
        else:
            pass


    # 时间同步（扩展）
    def t(self):
        pass

    # 位置校准（扩展）
    def p(self):
        pass

    def go(self, sign):
        n = len(sign)
        for i in range(n):
            #当检测到左转信号时，收集左转角度
            if sign[i] == 'L':
                l_d = ''
                for j in range(i+1,n):
                    try:
                        if type(eval(sign[j])) is int:
                            l_d += sign[j]
                    except:
                        break
                self.turn_left(eval(l_d))
            elif sign[i] == 'R':
                #当检测到右转信号时，收集右转角度
                r_d = ''
                for q in range(i+1,n):
                    try:
                        if type(eval(sign[q])) is int:
                            r_d += sign[q]
                    except:
                        break
                self.turn_right(eval(r_d))
            elif sign[i] == 'M':
                #检测到推进信号
                self.move()
            elif sign[i] == 'P':
                self.p()
            elif sign[i] == 'T':
                self.t()
            else:
                pass




    def run(self):
        sign = input("请输入当前截获的敌军信号：")
        self.go(str(sign))
        print("★敌军坦克最终位置的ｘ坐标是{},ｙ坐标是{},角度是{}".format(self.x,self.y,self.D))
        sleep(2)
        print("★★导弹已就位,准备发射．．．")
        sleep(2)
        print("★★★导弹已发射．．．")
        sleep(2)
        print("★★★★报告！目标以被摧毁．．．")

if __name__ == '__main__':
    tank = Tank()
    tank.run()

"""
假设敌军坦克期初位于（0,0）方向正北（即角度为0）

测试代码：
敌军坦克当前ｘ坐标：0
敌军坦克当前ｙ坐标：0
敌军坦克当前角度：0
截获的敌军信号1:L30L30L30MTP　　　　含义：连续３次左转30°后向前推进100米
截获的敌军信号2:R30R30R30MTP　　　　含义：连续３次右转30°后向前推进100米
"""

